//
//  ViewController.swift
//  IMUIDemo
//
//  Created by tbbMacmini on 2025/3/21.
//

import UIKit
import RxSwift
import RxCocoa
import SnapKit



class ViewController: UIViewController {
    
    //let disposeBag: DisposeBag = DisposeBag()
    
    
    private let viewModel = ChatViewModel()
    
    lazy var chatTableView: UITableView = {
        let tableView = UITableView(frame: CGRect.zero,style: .plain);
        tableView.backgroundColor = .clear;
        tableView.delegate = self;
//        tableView.dataSource = self;
    
        tableView.register(ChatTableViewSelfTextCell.self,forCellReuseIdentifier: "ChatTableViewSelfTextCell")
        tableView.register(ChatTableViewSelfImageViewCell.self,forCellReuseIdentifier: "ChatTableViewSelfImageViewCell")
        tableView.register(ChatTableViewOtherTextCell.self,forCellReuseIdentifier: "ChatTableViewOtherTextCell")
        tableView.register(ChatTableViewTimeCell.self,forCellReuseIdentifier: "ChatTableViewTimeCell")
        
//        tableView.estimatedRowHeight = 80;
//        tableView.rowHeight = UITableView.automaticDimension;
        
        return tableView
    }()

    lazy var chatInputToolBar: ChatInputToolBar = {
        let chatInputToolBar = ChatInputToolBar(frame: CGRect.zero)
        return chatInputToolBar;
    }()
    
    
    var chatImage:UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupView();
    }
    
    private func setupView() {
        self.navigationItem.title = "Test";
        self.view.backgroundColor = UIColor.white
        self.view.addSubview(self.chatTableView);
        view.addSubview(chatInputToolBar)
        
        chatInputToolBar.imageInputBlock = {[weak self] image in
            self?.sendImage(image: image);
        }
        
        chatInputToolBar.textInputBlock = {[weak self] text in
            self?.sendText(text: text);
        }
        
        chatInputToolBar.snp.makeConstraints { (make) in
            make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom)
            make.height.equalTo(44)
            make.left.right.equalTo(0)
        }
        
        chatTableView.snp.makeConstraints { make in
            make.top.left.right.equalTo(0);
            make.bottom.equalTo(chatInputToolBar.snp.top).offset(0)
        }
        
        viewModel.withBind(chatTableView: chatTableView);
        

        //withBind();
        
//        viewModel.messagesRelay
//                    .subscribe(onNext: {[weak self] messages in
//                        self?.chatTableView.reloadData();
//                
//                    })
//                    .disposed(by: disposeBag)
        
    }
    
//    private func withBind() {
//        viewModel.messagesRelay
//            .bind(to: chatTableView.rx.items) { tableView, row, message in
//                if(!message.mySelf){
//                    guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewOtherTextCell") as? ChatTableViewOtherTextCell else {
//                        return UITableViewCell()
//                    }
//                    cell.contentLable.text = message.text;
//                    return cell;
//                }
//                
//                if(message.type == .text){
//                    guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewSelfTextCell") as? ChatTableViewSelfTextCell else {
//                        return UITableViewCell()
//                    }
//                    cell.contentLable.text = message.text;
//                    return cell;
//                }else if(message.type == .image){
//                    guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewSelfImageViewCell") as? ChatTableViewSelfImageViewCell else {
//                        return UITableViewCell()
//                    }
//                    cell.chatImageView.image = message.image;
//                    
//                    return cell;
//                }else{
//                    guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewTimeCell") as? ChatTableViewTimeCell else {
//                        return UITableViewCell()
//                    }
//                    cell.contentLable.text = message.text;
//                    return cell;
//                }
//            }.disposed(by: disposeBag)
//    }
    
    
    private func sendImage(image:UIImage) {
        viewModel.sendImage(image: image)
    }
    
    private func sendText(text:String) {
        chatTableView.reloadData();
        if(text.count > 0){
            viewModel.sendText(text: text)
        }else{
            print("请输入内容")
        }
    }


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
    }
}

extension ViewController:UITableViewDelegate {
    
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let message = viewModel.messagesRelay.value[indexPath.row];
        if(message.type == .image){
            return 200;
        }else if(message.type == .time){
            return 30
        }
        
        return  100
    }
    
//    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//        return viewModel.messagesRelay.value.count;
//    }
//    
//    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let message = viewModel.messagesRelay.value[indexPath.row];
//        
//        if(!message.mySelf){
//            guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewOtherTextCell") as? ChatTableViewOtherTextCell else {
//                return UITableViewCell()
//            }
//            cell.contentLable.text = message.text;
//            return cell;
//        }
//        
//        if(message.type == .text){
//            guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewSelfTextCell") as? ChatTableViewSelfTextCell else {
//                return UITableViewCell()
//            }
//            cell.contentLable.text = message.text;
//            return cell;
//        }else if(message.type == .image){
//            guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewSelfImageViewCell") as? ChatTableViewSelfImageViewCell else {
//                return UITableViewCell()
//            }
//            cell.chatImageView.image = message.image;
//            
//            return cell;
//        }else{
//            guard let cell = tableView.dequeueReusableCell(withIdentifier: "ChatTableViewTimeCell") as? ChatTableViewTimeCell else {
//                return UITableViewCell()
//            }
//            cell.contentLable.text = message.text;
//            return cell;
//        }
//    
//        
//    }



    
}
